Multi-threading is a well known programming and execution model. In multi-threading, an application program is divided into multiple concurrent streams of execution, generally referred to as threads. Each of such threads typically includes a sequence of instructions and data to carry out a particular programming task, such as a computation task or an input/output task. Although, the threads share resources, such as CPU, memory, IO, network, but are able to execute independently.
Most of current enterprise application programs are designed by leveraging the concept of multithreading in which multiple threads generally run concurrently under different thread groups. In such cases, there are high chances that such threads could cause performance issues which might be unmanageable by manual tracking. The presence of threads in an application opens up many potential issues regarding safe access to the resources as two threads modifying the same resource might interfere with each other in inadvertent ways. For example, one thread might overwrite changes made by another thread or put the application into an unknown and potentially invalid state. This may cause the application program to slow down or even crash. Therefore, performance testing of multithread applications is critical.